1. Field of the Invention
Embodiments of the present invention generally relate to data storage systems. More particularly, embodiments of the present invention relate to the field of architectures for implementing failure recovery.
2. Related Art
Advances in technology have been accompanied by a tremendous growth in available information. This available information has driven a demand for data storage systems that possess a wide range of functionality to deliver and store the available information. Typically, a variety of design choices are made to craft a data storage system that meets a particular set of design requirements. Generally, these design requirements include the number of ports for accessing the data, the particular data accessible through each port, and the architecture for maintaining coherency so that multiple external systems can access the data and, yet, have a similar view of the content in the data storage system to avoid corrupting the data.
Generally, a single-attached data storage system has a single physical connection port that is used to connect to external systems (e.g., a host computer). In this case, scalability is limited. Moreover, performance and capacity are highly dependent on the processing speed of the single-attached data storage system. Since only one port provides access to the data, there is little tolerance for port failures, reducing the system's availability and robustness.
A multi-attached data storage system has two or more physical connection ports that are used to connect to external systems (e.g., a host computer). Typically, the multi-attached data storage system provides improved scalability, performance, and capacity compared to the single-attached data storage system, along with greater failure tolerance and higher levels of availability and robustness. Here, a particular design choice has to be made: (case 1) whether the external system is allowed to access different portions of the stored data only via particular ports, or (case 2) whether the external system is allowed to access any portion of the stored data via any of the available ports at any time.
In case 1, each port is logically connected to a non-overlapping portion of the stored data. When there is a port failure, one of the surviving ports may take over the data portion that was previously accessed through the failed port. This is commonly known as an Active-Passive configuration.
The case 2 is known as an Active-Active configuration when there are only two ports. The two ports present a single coherent logical image of the stored data to the external systems. When there are an arbitrary number of ports, this case is known as an Active^N configuration.
Lastly, any data storage system accessible by multiple external systems usually implements a scheme for maintaining coherency. Various approaches have been implemented. Typically, these architectures require the performance of a locking operation before the data storage system can process a data access request (e.g., to read data, to write data, etc.) from an external system. In essence, the external system secures a lock on the particular portion of the stored data that the external system needs to access. A lock conflict occurs when one external system holds a lock on a portion of the stored data that another external system needs to access. Unfortunately, lock conflicts in such architectures severely limit scalability and performance.